package com.sise.Linked;

/**
 *      剑指 Offer 18. 删除链表的节点
 *      给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
 *      返回删除后的链表的头节点。
 */
public class _offer_18_deleteNode {
    public ListNode deleteNode(ListNode head, int val) {

        if (head == null) return null;
        if (head.val == val) return head.next;      // 如果删除的是头结点，那么直接返回它下一个节点即可

        ListNode cur = head;
        while (cur.next != null && cur.next.val != val){    // 这里判断下一步的节点的值
            cur = cur.next;
        }
        if (cur.next != null){
            cur.next = cur.next.next;    // 这里需要判断是否为空，因为有可能在上面的 while 遍历完了，都没找到该值
        }
        return head;
    }
}
